package com.proyecto.swarm;

import java.util.List;

import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class BaseDatos {
	
	private static final String NOMBRE_BASEDATOS = "baseDatos";
	private static final int VERSION_BASEDATOS = 1;
	
	/**
     * Variable que guarda el objeto que accede a la base de datos.
     */
	private DataBaseHelper mAyudanteBD;
	
	/**
	* Variable que guarda la base de datos en si.
	*/
	private SQLiteDatabase mBd;
	
	/**
	* Contexto donde se usará la base de datos.
	*/
	private final Context mContexto;
	
	
	public BaseDatos(Context contexto){
		mContexto = contexto;
	}
	
	/** Metodo que se usa para abrir el acceso a la base de datos.
	*
	* @throws SQLException Si ha habido algun error al abrir la base de datos.
	*
	* @return la base de datos.
	*/
	public BaseDatos abre() throws SQLException {
		
		//Creamos el ayudante de acceso para la base de datos.
    	mAyudanteBD = new DataBaseHelper(mContexto);
    	
		//Creamos la variable para la base de datos.
        mBd = mAyudanteBD.getWritableDatabase();
        
        return this;
    }
	
	/** Metodo que cierra la base de datos.
	*
	*/
	public void cierra(){		
    	mAyudanteBD.close();  
	}
	
	public Cursor selectMonumentos(){
		return mBd.query("monumentos", null, null, null, null, null, null);		
	}
	
	public boolean insertarRuta(PolylineOptions ruta){
		
		List<LatLng> listaPuntos = ruta.getPoints();
		
		for (int i = 0; i < listaPuntos.size(); i++){
			
			ContentValues valoresIniciales = new ContentValues();
			valoresIniciales.put("idruta", 1);			
			valoresIniciales.put("latitud", listaPuntos.get(i).latitude);
			valoresIniciales.put("longitud", listaPuntos.get(i).longitude);
			
			mBd.insert("inforutas", null, valoresIniciales);
		}
		return true;
	}
	
	
	/**
	 * Implementacion de la clase DataBaseHelper.
	 */	
	private static class DataBaseHelper extends SQLiteOpenHelper{
		
		/** Metodo constructor de la clase, llamamos a la clase padre para que cree el objeto.
		*
		* @param context Contexto donde se usar� la base de datos.
		*/
		DataBaseHelper(Context context) {
			super(context, NOMBRE_BASEDATOS, null, VERSION_BASEDATOS);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			String tablaMonumentos = "create table monumentos (clave text primary key not null, titulo text not null, latitud real not null, longitud real not null);";
			String tablaRutas = "create table rutas (idruta integer primary key, nombreRuta text not null);";
			String tablaInfoRutas = "create table inforutas (_id integer primary key not null, idruta integer, latitud real, longitud real);";
			
			db.execSQL(tablaMonumentos);
			db.execSQL(tablaRutas);
			db.execSQL(tablaInfoRutas);
			
			insertarMonumento(db, "catedral", "Catedral", 37.385903, -5.993110);			
			insertarMonumento(db, "ayuntamiento", "Ayuntamiento", 37.388444, -5.994615);
			insertarMonumento(db, "salvador", "Iglesia del Salvador", 37.390082, -5.992616);
			insertarMonumento(db, "maestranza", "Plaza de toros Maestranza", 37.385940, -5.998378);
			insertarMonumento(db, "catalina", "Iglesia Santa Catalina", 37.393061, -5.988014);			
			insertarMonumento(db, "macarena", "Basílica Macarena", 37.402683, -5.989546);
			insertarMonumento(db, "pilatos", "Casa de Pilatos", 37.390014, -5.987080);
			insertarMonumento(db, "santacruz", "Iglesia Santa Cruz", 37.386657, -5.989385);
			insertarMonumento(db, "sanluis", "Iglesia San Luis", 37.398372, -5.988231);
			insertarMonumento(db, "alcazar", "Real Alcazar", 37.384086, -5.991119);
			insertarMonumento(db, "caridad", "Hospital de la Caridad", 37.383908, -5.995629);
			insertarMonumento(db, "torreoro", "Torre del Oro", 37.382407, -5.996306);
			insertarMonumento(db, "bellasartes", "Museo de Bellas Artes", 37.392637, -5.999686);
			insertarMonumento(db, "plazaespania", "Plaza de España", 37.377082, -5.986893);
			insertarMonumento(db, "cartuja", "Monasterio de la Cartuja", 37.398460, -6.008972);
			insertarMonumento(db, "santaana", "Iglesia Santa Ana", 37.382872, -6.000350);
			insertarMonumento(db, "hercules", "Columnas de Hércules", 37.399228, -5.993617);
			insertarMonumento(db, "universidad", "Universidad", 37.380278, -5.989444);
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			db.execSQL("DROP TABLE IF EXISTS monumentos");
            onCreate(db);			
		}
		
		private boolean insertarMonumento(SQLiteDatabase db, String clave, String titulo, double latitud, double longitud){
			ContentValues valoresIniciales = new ContentValues();
			valoresIniciales.put("clave", clave);
			valoresIniciales.put("titulo", titulo);
			valoresIniciales.put("latitud", latitud);
			valoresIniciales.put("longitud", longitud);
			
			return db.insert("monumentos", null, valoresIniciales) > 0;
		}		
	}
}
